import requests
import re
import time

# 作者：@guigu77
province_map = {
    '北京': 'BJ',
    '天津': 'TJ',
    '河北': 'HB',
    '山西': 'SX',
    '内蒙古': 'NM',
    '辽宁': 'LN',
    '吉林': 'JL',
    '黑龙江': 'HL',
    '上海': 'SH',
    '江苏': 'JS',
    '浙江': 'ZJ',
    '安徽': 'AH',
    '福建': 'FJ',
    '江西': 'JX',
    '山东': 'SD',
    '河南': 'HA',
    '湖北': 'HB',
    '湖南': 'HN',
    '广东': 'GD',
    '广西': 'GX',
    '海南': 'HI',
    '重庆': 'CQ',
    '四川': 'SC',
    '贵州': 'GZ',
    '云南': 'YN',
    '西藏': 'XZ',
    '陕西': 'SN',
    '甘肃': 'GS',
    '青海': 'QH',
    '宁夏': 'NX',
    '新疆': 'XJ'
}

def GET_QQW(region, prefix):
    number_sg = f"{region}{prefix}"
    url = f"https://telphone.cn/prefix/{number_sg}/"
    try:
        response = requests.get(url, timeout=10)
        response.raise_for_status()  # 检查HTTP错误状态码
        html_content = response.text
        pattern = re.compile(r'<a href="/prefix/(\d{7})/">([\d]+)号段')
        matches = pattern.findall(html_content)
        return [match[1] for match in matches]
    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")
        return []

def main():
    phonex = input('输入模糊手机号（前三位不可模糊）:\n> ')
    region_input = input('输入地区（输入“全国”以遍历所有省份）:\n> ')
    
    prefix = phonex[:3]
    matched_numSG = []
    
    if region_input == '全国':
        provinces = list(province_map.keys())
        total = len(provinces)
        for i, province_name in enumerate(provinces, 1):
            print(f"\r正在处理第{i}/{total}个省份: {province_name}", end='', flush=True)
            
            # 使用中文省份名称获取号段
            numSG_list = GET_QQW(province_name, prefix)
            matched_numSG.extend(numSG_list)
            
            # 请求间隔控制
            time.sleep(1)  # 每次请求后暂停x秒
            
        print("\n数据处理完成！")
    else:
        # 使用输入的省份缩写获取号段
        numSG_list = GET_QQW(region_input, prefix)
        matched_numSG = numSG_list
    
    # 去重并排序
    matched_numSG = sorted(list(set(matched_numSG)))
    
    # 保存结果
    with open('sjh.txt', 'w') as f:
        for num in matched_numSG:
            f.write(f"{num}\n")
    
    print(f"共找到 {len(matched_numSG)} 个号段，已保存到 sjh.txt")

if __name__ == "__main__":
    main()
